package cn.test.controller;

import cn.test.pojo.domain.*;
import cn.test.pojo.vo.StockInfoConfig;
import cn.test.service.StockService;
import cn.test.vo.resp.PageResult;
import cn.test.vo.resp.R;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import org.apache.ibatis.annotations.Param;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

import javax.servlet.http.HttpServletResponse;
import java.util.List;
import java.util.Map;
import java.util.Objects;

/**
 * @author bigBear
 * @version 1.0
 * @date 2024-10-21 12:59
 */

/**
 * 股票相关测试接口
 */
@Api(value = "/api/quot", tags = {"股票相关测试接口"})
@RestController
@RequestMapping("/api/quot")
public class StockController {

    @Autowired
    private StockService stockService;

    /**
     * 获取国内最新大盘指数
     *
     * @return
     */
    @ApiOperation(value = "获取国内最新大盘指数", notes = "获取国内最新大盘指数", httpMethod = "GET")
    @GetMapping("/index/all")
    public R<List<InnerMarketDomain>> innerIndexAll() {
        return stockService.innerIndexAll();
    }

    /**
     * 获取沪深两市板块最新数据，以交易总金额降序查询，取前10条数据
     *
     * @return
     */
    @ApiOperation(value = "获取板块指数信息", notes = "获取沪深两市板块最新数据，以交易总金额降序查询，取前10条数据", httpMethod = "GET")
    @GetMapping("/sector/all")
    public R<List<StockBlockDomain>> sectorAllLimit10() {
        return stockService.sectorAllLimit10();
    }

    /**
     * 分页查询股票最新数据，并按照涨幅倒序排序
     *
     * @param page     当前页码
     * @param pageSize 每页显示条数
     * @return
     */
    @ApiImplicitParams({
            @ApiImplicitParam(paramType = "query", dataType = "int", name = "page", value = "当前页码"),
            @ApiImplicitParam(paramType = "query", dataType = "int", name = "pageSize", value = "每页显示条数")
    })
    @ApiOperation(value = "分页查询股票最新数据，并按照涨幅倒序排序", notes = "分页查询股票最新数据，并按照涨幅倒序排序", httpMethod = "GET")
    @GetMapping("/stock/all")
    public R<PageResult> getStockPageInfo(@RequestParam(value = "page", defaultValue = "1", required = false) Integer page,
                                          @RequestParam(value = "pageSize", defaultValue = "20", required = false) Integer pageSize) {
        return stockService.getStockPageInfo(page, pageSize);
    }

    /**
     * 获取涨幅前4的股票信息
     *
     * @return
     */
    @ApiOperation(value = "获取涨幅前4的股票信息", notes = "获取涨幅前4的股票信息", httpMethod = "GET")
    @GetMapping("/stock/increase")
    public R<List<StockRtDomain>> getStockIncreaseBy4() {
        return stockService.getStockIncreaseBy4();
    }

    /**
     * 统计最新交易日下股票每分钟涨跌停的数量
     *
     * @return
     */
    @ApiOperation(value = "统计最新交易日下股票每分钟涨跌停的数量", notes = "统计最新交易日下股票每分钟涨跌停的数量", httpMethod = "GET")
    @GetMapping("/stock/updown/count")
    public R<Map<String, List>> getStockUpDownCount() {
        return stockService.getStockUpDownCount();
    }

    /**
     * 将分页涨幅榜下指定页码的数据导出到excel表格下
     *
     * @param response
     * @param page     当前页
     * @param pageSize 每页显示条数
     */
    @ApiImplicitParams({
            @ApiImplicitParam(paramType = "query", dataType = "int", name = "page", value = "当前页"),
            @ApiImplicitParam(paramType = "query", dataType = "int", name = "pageSize", value = "每页显示条数")
    })
    @ApiOperation(value = "将分页涨幅榜下指定页码的数据导出到excel表格下", notes = "将分页涨幅榜下指定页码的数据导出到excel表格下", httpMethod = "GET")
    @GetMapping("/stock/export")
    public void exportStockUndownInfo(HttpServletResponse response,
                                      @RequestParam(value = "page", defaultValue = "1", required = false) Integer page,
                                      @RequestParam(value = "pageSize", defaultValue = "20", required = false) Integer pageSize) {
        stockService.exportStockUndownInfo(response, page, pageSize);
    }

    /**
     * 统计国内A股大盘T日和T-1日成交量对比功能（成交量为沪市和深市成交量之和）
     *
     * @return
     */
    @ApiOperation(value = "统计国内A股大盘T日和T-1日成交量对比功能（成交量为沪市和深市成交量之和）", notes = "统计国内A股大盘T日和T-1日成交量对比功能（成交量为沪市和深市成交量之和）", httpMethod = "GET")
    @GetMapping("/stock/tradeAmt")
    public R<Map<String, List>> stockTradeVol4InnerMarket() {
        return stockService.stockTradeVol4InnerMarket();
    }

    /**
     * 查询当前时间下股票的涨跌幅度区间统计功能
     * 如果当前日期不在有效时间内，则以最近的一个股票交易时间作为查询点
     *
     * @return
     */
    @ApiOperation(value = "查询当前时间下股票的涨跌幅度区间统计功能 如果当前日期不在有效时间内，则以最近的一个股票交易时间作为查询点", notes = "查询当前时间下股票的涨跌幅度区间统计功能 如果当前日期不在有效时间内，则以最近的一个股票交易时间作为查询点", httpMethod = "GET")
    @GetMapping("/stock/updown")
    public R<Map<String, Object>> getStockUpDown() {
        return stockService.getStockUpDown();
    }

    /**
     * 查询单个个股的分时行情数据，也就是统计指定股票T日每分钟的交易数据；
     * 如果当前日期不在有效时间内，则以最近的一个股票交易时间作为查询时间点
     *
     * @param code 股票编码
     * @return
     */
    @ApiOperation(value = "查询单个个股的分时行情数据，也就是统计指定股票T日每分钟的交易数据；如果当前日期不在有效时间内，则以最近的一个股票交易时间作为查询时间点", notes = "功能描述：查询单个个股的分时行情数据，也就是统计指定股票T日每分钟的交易数据；         如果当前日期不在有效时间内，则以最近的一个股票交易时间作为查询时间点", httpMethod = "GET")
    @GetMapping("/stock/screen/time-sharing")
    public R<List<Stock4MinuteDomain>> stockScreenTimeSharing(String code) {
        return stockService.stockScreenTimeSharing(code);
    }


    /**
     * 单个个股日K 数据查询 ，可以根据时间区间查询数日的K线数据
     *
     * @param stockCode 股票编码
     */
    @ApiOperation(value = "单个个股日K 数据查询 ，可以根据时间区间查询数日的K线数据", notes = "单个个股日K 数据查询 ，可以根据时间区间查询数日的K线数据", httpMethod = "GET")
    @RequestMapping("/stock/screen/dkline")
    public R<List<Stock4EvrDayDomain>> getDayKLinData(@RequestParam("code") String stockCode) {
        return stockService.stockCreenDkLine(stockCode);
    }

}
